home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 23
/
Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso
/
Aminet
/
misc
/
emu
/
C64_tape.lha
/
ORGTAPE.ASM
next >
Wrap
Assembly Source File
|
1997-04-02
|
4KB
|
286 lines
*************************************************************************
* Original Tape Loader
* (C) 1995,1997 Per Håkan Sundell
* requires CCS adapter
*************************************************************************
* incdir Devpac:include
*=======================================================================*
* *
* CODE SECTION *
* *
*=======================================================================*
section CODE,code
Main
BSR OpenLibraries
bsr MakeTimeTable
BSR PressPlay
TST.L D0
BNE _mbreak
BSR ReadFileData
TST.L D0
BNE _merror
BSR SaveFile
TST.L D0
BNE _mserror
RTS
_merror LEA TXT_LOADERROR,A0
BSR Print
RTS
_mbreak LEA TXT_BREAK,A0
BSR Print
RTS
_mserror LEA TXT_SAVEERROR,A0
BSR Print
RTS
IrqOff
MOVE.W #$4000,$DFF09A
RTS
IrqOn
MOVE.W #$C000,$DFF09A
RTS
SaveFile
LEA file_name,A0
MOVE.L A0,D1
MOVE.L #$3EE,D2
MOVE.L dos_lib,A6
JSR -$1E(A6)
MOVE.L D0,D1
BEQ _sferror
CMP.L #$FFFFFFFF,D0
BEQ _sferror
MOVE.L D1,-(SP)
lea file_header,a0
move.l a0,d2
move.l #$14,d3
move.l file_length,d0
move.b d0,$10(a0)
lsr.l #8,d0
move.b d0,$11(a0)
lsr.l #8,d0
move.b d0,$12(a0)
lsr.l #8,d0
move.b d0,$13(a0)
MOVE.L dos_lib,A6
jsr -$30(a6)
MOVE.L (SP),D1
LEA file_data,A0
MOVE.L A0,D2
MOVE.L file_length,D3
MOVE.L dos_lib,A6
JSR -$30(A6)
MOVE.L (SP)+,D1
MOVE.L dos_lib,A6
JSR -$24(A6)
MOVEQ #0,D0
RTS
_sferror MOVEQ #1,D0
RTS
ReadFileData
bsr MotorOn
lea file_data,a0
move.l a0,a1
adda.l #$140000,a1
move.l #$140000,file_length
bsr ReadSync
_rfd1
bsr ReadByte1
move.b d0,(a0)+
btst #6,(a4)
beq _rfd2
bsr ReadByte2
move.b d0,(a0)+
cmp.l a0,a1
bne _rfd1
_rfd2
move.l a0,d0
sub.l #file_data,d0
move.l d0,file_length
bsr MotorOff
moveq #0,d0
rts
ReadSync
MOVE.W #$7F80,D7
MOVE.W #$40,$DFF0A8
MOVE.W #$80,$DFF09C
MOVE.W #$80,$DFF0A6
RTS
ReadByte1
moveq #0,D0
_rb1 or.b $d00(a5),D0
btst #4,D0
beq _rb1
move.b #$00,$e00(a5)
move.b #$19,$f00(a5)
move.w #$80,$09c(a6)
move.w d7,$0aa(a6)
move.w $006(a6),$180(a6)
and.b #$01,d0
beq _rb2
moveq #$00,d0
rts
_rb2
move.w $500(a5),d0
move.b $400(a5),d0
subq.w #$2,d0
lea time_table,a2
move.b 0(a2,d0.w),d0
RTS
ReadByte2
moveq #0,D0
_rb3 or.b $d00(a5),D0
btst #4,d0
beq _rb3
move.b #$00,$f00(a5)
move.b #$19,$e00(a5)
move.w #$80,$09c(a6)
move.w d7,$0aa(a6)
move.w $006(a6),$180(a6)
and.b #$02,d0
beq _rb4
moveq #$00,d0
rts
_rb4
move.w $700(a5),d0
move.b $600(a5),d0
subq.w #$2,d0
lea time_table,a2
move.b 0(a2,d0.w),d0
rts
MakeTimeTable
lea time_table,a0
move.w #$5c2,d2
_mtt1
move.w d2,d0
mulu #$07ff,d0
divu #$05c2,d0
lsr #3,d0
move.b d0,(a0)+
subq.w #1,d2
bne _mtt1
rts
PressPlay
BCLR #5,$BFD100
MOVE.B $BFE001,D0
BSET #5,$BFD100
BTST #5,D0
BEQ _pp2
LEA TXT_PLAY,A0
BSR Print
_pp1 BTST #6,$BFE001
BEQ _pp3
BCLR #5,$BFD100
MOVE.B $BFE001,D0
BSET #5,$BFD100
BTST #5,D0
BNE _pp1
_pp2 MOVEQ #0,D0
RTS
_pp3 MOVEQ #1,D0
RTS
MotorOn
bsr IrqOff
lea $dff000,a6
lea $bfd000,a5
lea $bfe001,a4
bclr #7,$100(a5)
bclr #5,$100(a5)
move.b #$0,$e00(a5)
move.b #$0,$f00(a5)
move.b #$5,$500(a5)
move.b #$c2,$400(a5)
move.b #$5,$700(a5)
move.b #$c2,$600(a5)
move.b $d00(a5),d0
moveq #0,d0
_mo1 dbra d0,_mo1
rts
MotorOff
BSET #7,$BFD100
BSET #5,$BFD100
BCLR #5,$BFD100
BSET #5,$BFD100
BSR IrqOn
RTS
OpenLibraries
LEA doslibrary.MSG,A1
MOVEQ #0,D0
MOVE.L 4,A6
JSR -$198(A6)
MOVE.L D0,dos_lib
MOVE.L dos_lib,A6
JSR -$3C(A6)
MOVE.L D0,std_out
RTS
Print
MOVEM.L D2/D3/A6,-(SP)
MOVE.L A0,D2
MOVEQ #0,D3
_p1 TST.B (A0)+
BEQ _p2
ADDQ.L #1,D3
BRA _p1
_p2 TST.L D3
BEQ _p3
MOVE.L std_out,D1
MOVE.L dos_lib,A6
JSR -$30(A6)
_p3 MOVEM.L (SP)+,D2/D3/A6
RTS
*=======================================================================*
* *
* DATA SECTION *
* *
*=======================================================================*
Section DATA,data
TXT_PLAY dc.b 10,'PRESS PLAY ON TAPE',$A,0
TXT_FOUND dc.b 'FOUND ',0
TXT_LOADING dc.b 'LOADING',$A,0
TXT_BREAK dc.b 'BREAK ERROR',$A,0
TXT_LOADERROR dc.b 'LOAD ERROR',$A,0
TXT_SAVEERROR dc.b 'UNABLE TO CREATE AMIGA FILE ERROR',$A,0
TXT_LINEFEED dc.b 10,0
doslibrary.MSG dc.b 'dos.library',0,0
file_name dc.b 'RAWTAPE',0
file_header dc.b 'C64-TAPE-RAW',0,0,0,0
dc.b 0,0,0,0
Section Bss,BSS
dos_lib ds.l 1
std_out ds.l 1
time_table ds.b $600
file_length ds.l 1
file_data ds.b $140000
END